package com.snj.test2508;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;

public class MonthRangeUtils {

    /**
     * 获取传入时间的整年所有月份，并返回每个月的第一天和最后一天
     *
     * @param dateStr 传入的日期字符串，格式为 "yyyy-MM-dd"
     * @return 包含每个月第一天和最后一天的 List<List<String>>
     */
    public static List<List<String>> getYearMonthFirstAndLastDay(String dateStr) {
        // 定义日期格式化器
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM");

        // 将传入的字符串转换为 LocalDate
        LocalDate date = LocalDate.parse(dateStr, formatter);

        // 获取年份
        int year = date.getYear();

        // 封装整年所有月份的 List
        List<String> monthList = new ArrayList<>();
        for (int month = 1; month <= 12; month++) {
            LocalDate firstDayOfMonth = LocalDate.of(year, month, 1);
            monthList.add(firstDayOfMonth.format(monthFormatter));
        }

        // 封装每个月第一天和最后一天的 List
        List<List<String>> result = new ArrayList<>();

        // 遍历月份 List
        for (String month : monthList) {
            // 将月份字符串转换为 LocalDate
            LocalDate firstDayOfMonth = LocalDate.parse(month + "-01", formatter);
            LocalDate lastDayOfMonth = firstDayOfMonth.with(TemporalAdjusters.lastDayOfMonth());

            // 封装当前月的第一天和最后一天
            List<String> monthRange = new ArrayList<>();
            // 第一天
            monthRange.add(firstDayOfMonth.format(formatter));
            // 最后一天
            monthRange.add(lastDayOfMonth.format(formatter));

            // 添加到结果 List
            result.add(monthRange);
        }

        return result;
    }

    public static void main(String[] args) {
        String dateStr = "2024-08-28";
        List<List<String>> result = getYearMonthFirstAndLastDay(dateStr);

        // 打印结果
        for (List<String> monthRange : result) {
            System.out.println("第一天: " + monthRange.get(0) + ", 最后一天: " + monthRange.get(1));
        }
    }
}